home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 8881 < prev    next >
Encoding:
Internet Message Format  |  1996-08-05  |  2.7 KB

  1. Path: keats.ugrad.cs.ubc.ca!not-for-mail
  2. From: c2a192@ugrad.cs.ubc.ca (Kazimir Kylheku)
  3. Newsgroups: comp.lang.c,comp.unix.programmer
  4. Subject: Re: Wildcard Expansion in Unix
  5. Followup-To: comp.unix.programmer
  6. Date: 6 Mar 1996 13:11:50 -0800
  7. Organization: Computer Science, University of B.C., Vancouver, B.C., Canada
  8. Message-ID: <4hkv2mINN4qm@keats.ugrad.cs.ubc.ca>
  9. References: <313DE8F4.1478@ee.gatech.edu>
  10. NNTP-Posting-Host: keats.ugrad.cs.ubc.ca
  11.  
  12. In article <313DE8F4.1478@ee.gatech.edu>,
  13. Chris Lanciani  <lanciani@ee.gatech.edu> wrote:
  14. >Does anyone know of a way to perform wildcard expansion, in C,
  15. >on unix platforms?  That is, if I write a program that accepts 
  16. >filenames as input arguments, how can I make it handle 
  17. >"?" and "*" correctly?
  18.  
  19. Normally you don't. Your shell expands these regular expressions into an
  20. extended argument list that is passed to the program. The advantage of this is
  21. that it simplifies your program, and allows you to use a variety of shells
  22. that support various kinds of pattern matching.  The disadvantage is that most
  23. UNIX systems have a kernel-imposed limit on the amount of argument and
  24. evironment space that can be passed to a process, and that with this method an
  25. interactive program can't use new globbing patterns once it has started (e.g.
  26. ones derived as user input,  or from configuration or script files).
  27.  
  28. >I am aware of the findfirst() and findnext() functions for the 
  29. >PC (with Borland's compiler, at least), but the portability 
  30.  
  31. Those functions are part of MS-DOS. They are nasty in that there is a global
  32. context for findfirst()/findnext(). They are not not re-entrant, and therefore
  33. tricky to use recursively.
  34.  
  35. >table for these functions does not include unix systems.  I
  36.  
  37. UNIX systems have a POSIX.1 standardized mechanism for reading directories
  38. known as the ``dirent'' functions. These are re-entrant. You open a dirent
  39. stream associated with a directory, and than read the elements of the directory
  40. as a stream, independently of other open streams. These functions are discussed
  41. in K&R2. However, they don't do pattern matching.
  42.  
  43. >also know that Borland includes a .obj file that can be linked
  44. >with the program that does the wildcard expansion for you. 
  45. >Does such a thing exist with gcc on unix?
  46.  
  47. The shell does that in UNIX.
  48.  
  49. There is also a function known as glob() that you can use for filename pattern
  50. expansion when you need to do it inside your program. This is standardized by
  51. POSIX.2. Your system may have a manual page on ``glob''. The glob() function
  52. will actually search the filesystem for files that match your expression.
  53.  
  54. [ redirected to comp.unix.programmer ]
  55.  
  56.  
  57.  
  58.  
  59. >Thanks for any hints.
  60. >-- 
  61. >
  62. >Chris
  63. > Lanciani
  64. >lanciani@eedsp.gatech.edu
  65.  
  66.  
  67. -- 
  68.  
  69.